#Boa:Dialog:Vista
# -*- coding: utf-8 -*-

import wx
import wx.grid
import utiles
import consultasBD
import Mensaje
import Email
import sincronizar_tabla 
import sys
import os
import servers

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)

enieconsola="\xa4"
enieacentuadadesktop="\xf1"
eacentuadadesktop="\xe9"

def create(parent):
    return Vista(parent)

[wxID_VISTA, wxID_VISTABTN_IMPRIMIR, wxID_VISTABUTTON1, wxID_VISTABUTTON2, 
 wxID_VISTAGRILLA, wxID_VISTANOMBRE_LISTADO, 
] = [wx.NewId() for _init_ctrls in range(6)]

class Vista(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_VISTA, name=u'Vista', parent=prnt,
              pos=wx.Point(184, 59), size=wx.Size(978, 472),
              style=wx.DEFAULT_DIALOG_STYLE, title=u'Listado')
        self.SetClientSize(wx.Size(970, 445))

        self.grilla = wx.grid.Grid(id=wxID_VISTAGRILLA, name=u'grilla',
              parent=self, pos=wx.Point(8, 32), size=wx.Size(952, 375),
              style=0)
        self.grilla.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnGrillaGridCellLeftDclick)

        self.btn_imprimir = wx.Button(id=wxID_VISTABTN_IMPRIMIR,
              label=u'Imprimir', name=u'btn_imprimir', parent=self,
              pos=wx.Point(760, 413), size=wx.Size(85, 27), style=0)
        self.btn_imprimir.Bind(wx.EVT_BUTTON, self.OnBtn_imprimirButton,
              id=wxID_VISTABTN_IMPRIMIR)

        self.nombre_listado = wx.StaticText(id=wxID_VISTANOMBRE_LISTADO,
              label=u'Nombre del listado', name=u'nombre_listado', parent=self,
              pos=wx.Point(8, 8), size=wx.Size(119, 15), style=0)

        self.button1 = wx.Button(id=wxID_VISTABUTTON1, label='Enviar EMAILs',
              name='button1', parent=self, pos=wx.Point(648, 413),
              size=wx.Size(85, 27), style=0)
        self.button1.Show(False)
        self.button1.Bind(wx.EVT_BUTTON, self.enviarEmails,
              id=wxID_VISTABUTTON1)

        self.button2 = wx.Button(id=wxID_VISTABUTTON2, label='Salir',
              name='button2', parent=self, pos=wx.Point(888, 416),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_VISTABUTTON2)

    def __init__(self, parent, label):
        self._init_ctrls(parent)
        self.padrepadrepadre = parent
        self.sucursal = 1 #self.padrepadrepadre.sucursalNro
        self.titulo = label
        self.tamanio = ""
        self.periodos = []
        aux = "Cumplea"+enieacentuadadesktop+"os de hoy:"
        try:
            if self.titulo==aux :
                self.button1.Show(True)
                #self.btn_imprimir.SetLabel("Enviar EMAILS")
                #self.btn_imprimir.Refresh()
        except:
            pass
        if self.titulo=="Cambios De Precios":
            self.cambioprecios()
        self.nombre_listado.SetLabel(label)

    def cambioprecios(self):
        fecha = self.padrepadrepadre.fecha
        fechahasta = fecha[:4]+"-"+str(int(fecha[:7][5:])- 1)+"-"+fecha[8:]
        
        print fecha
        print fechahasta
        SQL= "SELECT * FROM cambiosprecios WHERE fecha between '%s' AND '%s' ORDER BY IDCAMBIO DESC" % (fechahasta,fecha)
        resultados = consultasBD.ordenCruda(SQL)
        
        self.datos = resultados
        self.columnas = ["IDCambio","PTC    ","CodSussan   ","DESCRIPCION    ","Precio Viejo","Precio Nuevo","Estado", " FECHA " , "S. STA FE", "S. PARANA"]

        cant_columnas = len(self.columnas)
        cant_filas = len(self.datos)
        self.grilla.CreateGrid(cant_filas, cant_columnas)
        #self.grilla.EnableGridLines(False)
        
        for x1 in xrange(len(self.datos)):
            for i1 in xrange(len(self.columnas)):
                    self.grilla.SetReadOnly(int(x1),int(i1),True)    
        
        # setea nombre de las columnas
        for i in xrange(len(self.columnas)):
            self.grilla.SetColLabelValue(i,self.columnas[i])

        # cargo el contenido de la grilla
        for i, fila in enumerate(resultados):
            
            for j, data in enumerate(fila):
                if j==1:
                    ptc = str(data)
                    SQL = "SELECT stock FROM stock WHERE ptc='%s' AND sucursal=1" % (ptc)
                    print SQL
                    stocksanta = 0
                    result = consultasBD.ordenCrudaDict(SQL)
                    for l in result:
                        stocksanta = result[0]["stock"]
                    
                    SQL = "SELECT stock FROM stock WHERE ptc='%s' AND sucursal=2" % (ptc)
                    print SQL
                    stockparana = 0
                    result = consultasBD.ordenCrudaDict(SQL)
                    for l in result:
                        stockparana = result[0]["stock"]
                    
                    
                    SQL2 = "SELECT P.DESCRI as descri FROM producto_talle_color ptc, productos p WHERE p.codsussan=ptc.codsussan AND ptc.id='%s'" % ptc
                    result = consultasBD.ordenCrudaDict(SQL2)
                    for o in result:
                         descri = result[0]["descri"]
                if j==6:
                    self.grilla.SetCellValue(i,3, str(descri))
                    self.grilla.SetCellValue(i,7, str(data))
                    self.grilla.SetCellValue(i,8, str(stocksanta))
                    self.grilla.SetCellValue(i,9, str(stockparana))
                else:
                    self.grilla.SetCellValue(i,j, str(data))
        
    def cargar_celdas(self, datos, columnas, alineacion = None, periodos = "", tamanio = ""):
        """ carga la grilla principal:
        el argumento 'datos' es una lista que tiene tuplas con todos los datos que
        hay que mostrar en la vista. 'columnas' es una lista con el nombre
        de las columnas ordenados. 'alineacion' es una lista con indicaciones sobre
        la alinacion: 0 izquierda, 1 centro, 2 derecha (este argumento es opcional)
        """

        if (alineacion != None) and (len(columnas) != len(alineacion)):
            #si no se ha especificado correctamente la alineacion
            #se ignorara la alineacion pasada como argumento
            alineacion = None

        self.datos = datos
        self.columnas = columnas
        self.alineacion = alineacion
        self.periodos = periodos
        self.tamanio = 'size="'+tamanio+'"'

        cant_columnas = len(columnas)
        cant_filas = len(datos)

        self.grilla.CreateGrid(cant_filas, cant_columnas)
        #self.grilla.EnableGridLines(False)
        
        for x1 in xrange(len(datos)):
            for i1 in xrange(len(columnas)):
                    self.grilla.SetReadOnly(int(x1),int(i1),True)    
        
        # setea nombre de las columnas
        for i, nombre in enumerate(columnas):
            self.grilla.SetColLabelValue(i, nombre)
            
        # cargo el contenido de la grilla
        for i, fila in enumerate(datos):
            for j, columna in enumerate(fila):
                if (j+1)==len(fila):
                    if str(columna) == "1":
                        self.grilla.SetCellValue(i,4, "")
                        self.grilla.SetCellBackgroundColour(i,0,ROJO) #id
                        self.grilla.SetCellBackgroundColour(i,1,ROJO) #nombre
                        self.grilla.SetCellBackgroundColour(i,2,ROJO) #telefono
                        self.grilla.SetCellBackgroundColour(i,3,ROJO) #localidad
                        self.grilla.SetCellBackgroundColour(i,4,ROJO) #cumple
                        self.grilla.SetCellBackgroundColour(i,5,ROJO) #email
                        self.grilla.SetCellBackgroundColour(i,6,ROJO) #acumulados
                    continue
                if columna == None: columna = 1
                if "***" in str(columna): 
                    columna = "VERIFIQUE: fallecido o legales ***"
                    self.grilla.SetCellValue(i,j, str(columna))
                    break
                self.grilla.SetCellValue(i,j, str(columna))
                if alineacion != None:
                    if alineacion[j] == 0: #izquierda
                        self.grilla.SetCellAlignment(i,j, wx.ALIGN_LEFT, wx.ALIGN_CENTRE)
                    elif alineacion[j] == 1: #centro
                        self.grilla.SetCellAlignment(i,j, wx.ALIGN_CENTER, wx.ALIGN_CENTRE)
                    else: #centro
                        self.grilla.SetCellAlignment(i,j, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                
        #propiedades de las filas y las columnas
        for o in xrange(len(columnas)):
            self.grilla.AutoSizeColumn(o,True)
        
    def reporte_html(self, datos, columnas, alineacion = None, transferencia = ""):
        html = open('c:\\erpsussan\\modelos\\reporte.html', 'r').read()
        aux = "Cumplea"+enieacentuadadesktop+"os de hoy:"
        if self.titulo==aux :
            self.titulo="Cumplea&ntilde;os de hoy"
        if "LISTADO DEUDORES" in self.titulo:
            print "Listado de deudores"
            size = 'size="2"'
            if self.tamanio != "": size = self.tamanio 
            border = 'border="1"'
            cellpadding = "0"
            cellspacing = "0"
            columnas = ["ID","Apellido, Nombre","Telefono","Deuda a<br>30 d&iacute;as","Deuda a<br>60 d&iacute;as","Deuda a<br>90 d&iacute;as","Deuda a mas<br>de 90 d&iacute;as","Deuda no<br>vencida","Total"]
            ancho = []
            ancho.append(' width="6%" ')
            ancho.append(' width="28%" ')
            ancho.append(' width="18%" ')
            ancho.append(' width="8%" ')
            ancho.append(' width="8%" ')
            ancho.append(' width="8%" ')
            ancho.append(' width="8%" ')
            ancho.append(' width="8%" ')
            ancho.append(' width="8%" ')
            cadena_etiqueta = ""
            cadena_etiqueta+= '<br>'
            cadena_etiqueta+= '<font %s>\n' % (size)
            cadena_etiqueta+= '<table  width="100%" border="0" cellpadding="1" cellspacing="0" >'
            cadena_etiqueta+= '<tr><td width="17%"></td>'
            cadena_etiqueta+= '<td width="22%">PERIODOS PROCESADOS</td>\n'
            cadena_etiqueta+= '<td width="22%"></td>\n'
            cadena_etiqueta+= '<td width="22%"></td>\n'
            cadena_etiqueta+= '<td width="17%"></td></tr>'
            cadena_etiqueta+= '<tr><td></td>'
            cadena_etiqueta+= '<td>A 90 d&iacute;as: <strong>%s</strong></td>\n' % (self.periodos[2])
            cadena_etiqueta+= '<td>A 60 d&iacute;as: <strong>%s</strong></td>\n' % (self.periodos[1])
            cadena_etiqueta+= '<td>A 30 d&iacute;as: <strong>%s</strong></td>\n' % (self.periodos[0])
            cadena_etiqueta+= '<td></td></tr>'
            cadena_etiqueta+= '</table>'
            #size = ''
        else:
            cadena_etiqueta = ""
            size = 'size="1.5"'
            border = 'border="1.5"'
            cellpadding = "1"
            cellspacing = "1"
            ancho = []
            for i in xrange(len(columnas)):
                ancho.append('')
            
        titulo = '<p align="center"><strong>'+str(self.titulo)+'</strong></p>'
        datos_sucursal = utiles.datosSucursal()
        miImagen = "imgs\logosucursal"+datos_sucursal[0]+".png"
        cadena_imagen = ' <img src="%s" />' % (miImagen)
        if len(datos_sucursal) == 2:
            cadena_sucursal = '<div align="center">'+datos_sucursal[1]+'</div>\n'
        else:
            cadena_sucursal = '<div align="center">sucursal no especificada</div>\n'
        cadena_fecha = '<p align="right">Fecha: %s&nbsp;&nbsp;<br/>\n' % (utiles.getfechaTime())

        if transferencia != "":
            size = 'size="1.5"'
            cadena_etiqueta = ""
            cadena_etiqueta+= '<br><font %s>Fecha transferencia: <strong>%s</strong><br>\n' % (size,transferencia[0])
            cadena_etiqueta+= 'Numero de transferencia: <strong>%s</strong><br>\n' % transferencia[1]
            cadena_etiqueta+= 'Sucursal Origen:&nbsp; <strong>%s</strong><br>\n' % transferencia[2]
            cadena_etiqueta+= 'Sucursal Destino: <strong>%s</strong><br>\n' % transferencia[3]
            cadena_etiqueta+= 'Cantidad de articulos: <strong>%s</strong></font>\n' % transferencia[4]
            #size = ''
            border = 'border="1"'
            cellpadding = "1"
            cellspacing = "1"
            ancho = []
            for i in xrange(len(columnas)):
                ancho.append('')

        cadena_reemplazo = '<table %s cellpadding="%s" cellspacing="%s">\n'
        cadena_reemplazo+= '<caption>%s</caption><thead>%s</thead><tbody align="left">%s</tbody>\n'
        cadena_reemplazo+= '</table>\n'
    
        nombre_columnas = '<tr>\n'
        for i,nombre in enumerate(columnas):
            nombre_columnas += '<td %s><font %s><strong>%s</strong></font></td>\n' % (ancho[i],size,nombre)
        nombre_columnas += '</tr>\n'

        contenido = ''
        for fila in datos:
            contenido += '<tr>\n'
            alinear = ''
            for j, columna in enumerate(fila):
                if alineacion != None:
                    if alineacion[j] == 0: alinear = 'align="left"'
                    elif alineacion[j] == 1: alinear = 'align="center"'
                    else: alinear = 'align="right"'
                contenido += '<td valign="center" %s><font %s>%s</font></td>\n' % (alinear,size,columna)
            contenido += '</tr>\n'

        cadena_reemplazo = cadena_reemplazo % (border,cellpadding,cellspacing,titulo, nombre_columnas, contenido)
        html = html.replace('{ % imagen % }', cadena_imagen)
        html = html.replace('{ % sucursal % }', cadena_sucursal)
        html = html.replace('{ % fecha % }', cadena_fecha)
        html = html.replace('{ % transferencia % }', cadena_etiqueta)
        html = html.replace('{ % reemplazar % }', cadena_reemplazo)
        archivo_salida = open('c:\\erpsussan.doc\\reporte_html.html', 'w')
        archivo_salida.write(html)
        archivo_salida.close()
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\erpsussan.doc\\reporte_html.html")

    def enviarEmails(self, event):
        print "Enviando mails a clientes"

        #idcliente,nombre,cumple,puntos,telefono,email,localidad/direccion
        #0         1      2      3      4        5     6
        lista = []
        for fil in xrange(self.grilla.GetNumberRows()):
            if self.grilla.GetCellValue(fil,0)=="": continue
            if self.grilla.GetCellValue(fil,4)=="": continue
            if "***" in self.grilla.GetCellValue(fil,1): continue
            nombre = self.grilla.GetCellValue(fil,1)
            email = self.grilla.GetCellValue(fil,4)
            lista.append((email,nombre))
        import mailcumpleanios
        mailcumpleanios.enviar(lista,0)

    def OnBtn_imprimirButton(self, event):
        aux = "Cumplea"+enieacentuadadesktop+"os de hoy:"
        if self.titulo==aux :
            texto='Recuerde enviar los email haciendo\nclick en el boton "Enviar Emails"'
            utiles.mensaje(None,texto)
        if self.titulo == "CajaDiaria":
            pass
        else:
            self.reporte_html(self.datos, self.columnas, self.alineacion)

    def OnGrillaGridCellLeftDclick(self, event):
        #hice una busq de producto y estoy haciendo realizando un pedido
        if self.titulo=="Busqueda de Articulos" :
            fil = self.grilla.GetGridCursorRow()
            col = self.grilla.GetGridCursorCol()
            if col==7:#col de sta fe
                sucDestino = 1 #estoy en parana y lo tienen en santa feestoy en santa fe y lo tienen en parana
            else:
                sucDestino = 2 #estoy en santa fe y lo tienen en parana
            
            sucActiva = self.padrepadrepadre.padrepadre._sucursal_activa()[0]
            if sucActiva==sucDestino:
                msg = "Esta seleccionando una cantidad\n de su misma sucursal."
                utiles.mensaje(self, msg)                        
                return
            
            self.grilla.SetCellBackgroundColour(fil, col, (0,255,0,255))
            self.grilla.SetCellBackgroundColour(fil, col, (0,255,0,255))
            contenido = self.grilla.GetCellValue(fil, col)
            
            if int(contenido) == 0:
                msg = "La sucursal destino no tiene Stock\n del Producto selecccionado"
                utiles.mensaje(self, msg)                        
                return                    
            
            
            sucActiva = self.padrepadrepadre.padrepadre._sucursal_activa()[0]
            proxInsert = utiles.secuencia(tabla="pedidos", sucursal=int(sucActiva))
            if col==7:#col de sta fe
                sucDestino = 1 #estoy en parana y lo tienen en santa feestoy en santa fe y lo tienen en parana
            else:
                sucDestino = 2 #estoy en santa fe y lo tienen en parana
            ptc= self.grilla.GetCellValue(fil, 0)
            cant = 1
            fechapedido= self.padrepadrepadre.padrepadre.fecha
            fecharecibido= ""
            estado = 1
            
            tablaSQL = "pedidos"      


            sql = "INSERT INTO pedidos(idpedido,idsucorigen,idsucdestino,ptc,cant,fechapedido,fecharecibido,estado) VALUES   ('%s','%s','%s','%s','%s','%s','%s','%s')" % (str(proxInsert),str(sucActiva),str(sucDestino),str(ptc),str(cant),str(fechapedido),str(fecharecibido),str(estado))

            print sql
            consultasBD.executa(None,sql)
            
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["pedidos"])
            
            mensaje = "Se realizo el Pedido NRO. %s" % str(proxInsert)
            ventana = Mensaje.Mensaje(self,mensaje)
            try:
                ventana.ShowModal()
            finally:
                ventana.Destroy()

    def OnSalir(self, event):
        self.Close()

            
     
